package com.lancoo.ccas53.aspect;

import org.redisson.api.RateType;

import java.lang.annotation.*;

/**
 * @ClassName RateLimiter
 * @Description 限流注解
 * @Author quin
 * @Date 2023/6/30 11:19
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
    /**
     * RRateLimiter 限流模式
     * OVERALL     所有客户端加总限流
     * PER_CLIENT  每个客户端单独计算流量
     */
    RateType mode() default RateType.OVERALL;

    /**
     * Spel表达式
     */
    String[] keys() default {};

    /**
     * 单位时间产生的令牌数，默认100
     */
    long rate() default 100;

    /**
     * 时间间隔，默认1秒
     */
    long rateInterval() default 1;

    /**
     * 拒绝请求时的提示信息
     */
    String showPromptMsg() default "服务器繁忙，请稍候再试";
}
